package main
import (
	"fmt"
	"unsafe"
)


/**
 * 常量和变量测试
 */
func main() {

	var a string = "Hello Sir !"
	fmt.Println(a)
	println()

	//常量测试
	fmt.Printf("1.常量测试--->常量")
	testConst()
	println();

	//特殊常量测试
	fmt.Printf("2.特殊常量测试")
	testEspecialConst()
	println();

	//测试数组
	fmt.Println("3.测试变量 ---> 数组")
	testArray()

	//测试类型转换
	fmt.Println("4.测试类型转换：\n")
	testDataTypeConvert();
}


/**
 * 常量测试
 */
func testConst(){

	const LENGTH int = 512
	const WIDTH int = 128
	var area int
	const a,b,c = 6,true,"hello" //多重赋值

	area = LENGTH * WIDTH
	fmt.Printf("面积为：%d", area)
	println()
	println(a,b,c)

}

/**
 * 测试特殊的常量（作为枚举）
 */
func testEspecialConst(){

	const(
		a = "abc"
		b = len(a)
		//if x is a slice, Sizeof returns the size of the slice descriptor, not the size of the memory referenced by the slice.
		c = unsafe.Sizeof(a) // 16 string 结构体 分为两个域（1.指针<地址> 2.长度），每个域 8个字节 
	) 

	println()
	println(a,b,c)

	slice := []int{1,3,5,7,9,11} 
	println(unsafe.Sizeof(slice))  //24 与slice 元素多少没有关系


	arr := [...]int{1,2,3,4,5,6,7,8,9}
	fmt.Println(unsafe.Sizeof(arr)) //内存中所占用的空间大小
}

/**
 * 测试数据
 */
func testArray(){
	//定义数组
	var array [3]string

	//添加元素
	array[0] = "张三"
	array[1] = "李四"
	array[2] = "王五"

	//输出
	fmt.Println(array)
}


/**
 * 测试类型转换
 */
func testDataTypeConvert(){ 

	var sum int = 17 
	var count int =5  
	var mean float32 = 10

	mean = float32(sum)/float32(count)

	fmt.Printf("float32(17)/float32(5) is %f \n", mean)

}
